/**
 * 
 */
package guiTegoNieBedzie;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;

import entities.*;

/**
 * @author Lukasz
 *
 */
public class KontrahentDAO extends DAO implements KontrahentDaoInter 
{

	/* (non-Javadoc)
	 * @see lab.dao.KontrahentDaoInter#dodajKontrahenta(lab.data.Kontrahent)
	 */
//	@Override
	public boolean dodajKontrahenta(KontrFirma k) {

		String sql = "INSERT INTO Kontrahenty_prawny (nazwa, regon, telefon, email, ulica, numer, kodPocztowy, nip, miasto) " +
		"VALUES( '"+k.getNazwa()+"','"+k.getRegon() +"','"+k.getTelefon() +"','"+k.getEmail()+"','"+k.getUlica() +"','"+k.getNumerUlicy() +"','"+k.getKodPocztowy() +"',null,'"+k.getMiasto() +"')";
		//System.out.println(sql);
		try 
		{
			this.db.dbSqlUpdate(sql);
			this.db.dbCommit();
			return true;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			return false;
		}
	}

	/* (non-Javadoc)
	 * @see lab.dao.KontrahentDaoInter#getListaWszystkichKontrahentow()
	 */
//	@Override
	public LinkedList<Kontrahent> getListaWszystkichKontrahentow( int i ) 
	{
		LinkedList<Kontrahent> listaKontrahentowPrawnych = new LinkedList<Kontrahent>();
		if(i == Kontrahent.FIZYCZNY)
		{			
			try 
			{
				ResultSet wynik = this.db.dbSqlQuery( "SELECT fizycznaID,telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip FROM Osoby_fizyczne" );
				while( wynik.next() )
				{
					KontrOsoba kontrOsoba = new KontrOsoba(wynik.getInt("fizycznaID"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("miasto"),wynik.getString("imie"),wynik.getString("nazwisko"),wynik.getString("pesel"),wynik.getString("nip"));

					listaKontrahentowPrawnych.add( kontrOsoba );
				}
				return listaKontrahentowPrawnych;
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}
		}
		else if(i == Kontrahent.PRAWNY)
		{
			try 
			{
				ResultSet wynik = this.db.dbSqlQuery( "SELECT kontrahentID, nazwa, regon, telefon, email, ulica, numer, kodPocztowy, nip, miasto FROM Kontrahenty_prawny" );
				while( wynik.next() )
				{
					KontrFirma kontrFirma = new KontrFirma(wynik.getInt("kontrahentID"),wynik.getString("nazwa"),wynik.getString("regon"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("nip"),wynik.getString("miasto"));

					listaKontrahentowPrawnych.add( kontrFirma );
				}
				return listaKontrahentowPrawnych;
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}

		}
		return null;
	}

//	@Override
	public boolean dodajKontrahenta(KontrOsoba k) {

		String sql = "INSERT INTO Osoby_fizyczne (telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip) " +
		"VALUES( '"+k.getTelefon()+"','"+k.getEmail() +"','"+k.getUlica() +"','"+k.getNumerUlicy()+"','"+k.getKodPocztowy() +"','"+k.getMiasto() +"','"+k.getImie() +"','"+k.getNazwisko() +"','"+k.getPesel()+"',null)";
		//System.out.println(sql);

		try 
		{
			this.db.dbSqlUpdate(sql);
			this.db.dbCommit();
			return true;
		}
		catch (SQLException e) 
		{
			e.printStackTrace();
			return false;
		}
	}

//	@Override
	public LinkedList<Kontrahent> getListaWszystkichKontrahentow(Kontrahent kontrahent, int i) 
	{
		LinkedList<Kontrahent> listaKontrahentowPrawnych = new LinkedList<Kontrahent>();
		if(i == Kontrahent.FIZYCZNY)
		{			
			try 
			{
				ResultSet wynik = this.db.dbSqlQuery( "SELECT fizycznaID,telefon, email, ulica, numer, kodPocztowy, miasto, imie, nazwisko, pesel, nip FROM Osoby_fizyczne WHERE imie LIKE '%"+ ((KontrOsoba)kontrahent).getImie() +"%' AND nazwisko LIKE '%"+ ((KontrOsoba)kontrahent).getNazwisko() +"%'" );
				while( wynik.next() )
				{
					KontrOsoba kontrOsoba = new KontrOsoba(wynik.getInt("fizycznaID"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("miasto"),wynik.getString("imie"),wynik.getString("nazwisko"),wynik.getString("pesel"),wynik.getString("nip"));

					listaKontrahentowPrawnych.add( kontrOsoba );
				}
				return listaKontrahentowPrawnych;
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}
		}
		else if(i == Kontrahent.PRAWNY)
		{
			try 
			{
				ResultSet wynik = this.db.dbSqlQuery( "SELECT kontrahentID, nazwa, regon, telefon, email, ulica, numer, kodPocztowy, nip, miasto FROM Kontrahenty_prawny WHERE nazwa LIKE '%"+ ((KontrFirma)kontrahent).getNazwa() +"%'" );
				while( wynik.next() )
				{
					KontrFirma kontrFirma = new KontrFirma(wynik.getInt("kontrahentID"),wynik.getString("nazwa"),wynik.getString("regon"),wynik.getString("telefon"),wynik.getString("email"),wynik.getString("ulica"),wynik.getString("numer"),wynik.getString("kodPocztowy"),wynik.getString("nip"),wynik.getString("miasto"));

					listaKontrahentowPrawnych.add( kontrFirma );
				}
				return listaKontrahentowPrawnych;
			} catch (SQLException e) {
				e.printStackTrace();
				return null;
			}

		}
		return null;
	}


//	@Override
	public int ostatnieIdKontrahenta( int i ) {

		int ostatnieId = -1;
		if(i == Kontrahent.FIZYCZNY)
		{
			try 
			{
				String sql ="SELECT IDENT_CURRENT('Osoby_fizyczne') as \"id\"";
				ResultSet wynik = this.db.dbSqlQuery( sql);
				while( wynik.next() )
				{
					ostatnieId = wynik.getInt("id");

				}				
			} 
			catch(SQLException e) 
			{
				e.printStackTrace();
				return ostatnieId;
			}
		}
		else if(i == Kontrahent.PRAWNY)
		{
			try 
			{
				String sql ="SELECT IDENT_CURRENT('Kontrahenty_prawny') as \"id\"";
				ResultSet wynik = this.db.dbSqlQuery( sql);
				while( wynik.next() )
				{
					ostatnieId = wynik.getInt("id");

				}				
			} 
			catch(SQLException e) 
			{
				e.printStackTrace();
				return ostatnieId;
			}
		}
		
		return ostatnieId;		

	}



}
